Computing environments, such as data centers, frequently employ cloud computing platforms, where “cloud” refers to a collective computing infrastructure that implements a cloud computing paradigm. For example, as per the National Institute of Standards and Technology, cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. Cloud-based data centers are deployed and managed by cloud service providers, who provide a computing environment for customers (tenants) to run their application programs (e.g. business applications or otherwise). The applications are typically run on one or more computing devices (i.e., host devices or hosts), and write data to and read data from one or more storage devices (e.g., hard disk drives, flash drives, etc.). The storage devices may be remote from the host devices such that they are connected via a communication network. However, some or all of the storage devices may be part of the same computing devices that implement the hosts.
Scheduling of the read and write requests, or input/output (TO) requests as they are also called, from the applications to the storage devices is managed by a software component known as an IO scheduler (also called a system IO scheduler). An IO scheduler does not typically issue requests to the storage devices in the order they are received or as soon as they are received from the applications. To do so would be highly inefficient since disk seeks (searching the disk for the memory location corresponding to the IO request) are considered time consuming and directly impact system throughput performance.
Thus, IO schedulers perform merging and sorting operations on pending IO requests. Merging is the coalescing of two or more requests into one by inserting a new request in a request queue such that the new request is issued along with an existing request in the queue. This is typically done, for example, when the two requests are being made to adjacent disk sectors. On the other hand, sorting is the organization of requests in the request queue based on sectors so that seeking operations along the request queue move, when possible, sequentially over the sectors of the disk. While most IO schedulers (e.g., Linux IO scheduler, deadline IO scheduler, complete fair queuing (CFQ) IO scheduler, Noop IO scheduler, etc.) perform some type of merging, sorting is not typically necessary when the storage device is a random access storage device (e.g., flash drive) and therefore sequential movement across the disk is not needed (e.g., the Noop IO scheduler performs only merging).